package fr.iut2.tc1.client;

import java.util.ArrayList;

import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

import fr.iut2.tc1.shared.Competence;
import fr.iut2.tc1.shared.Race;
import fr.iut2.tc1.shared.UnTroll;

public class CreatModifTroll extends Composite implements ChangeHandler, ClickHandler{

	private VerticalPanel page;
	private Button creer;
	private Button retour;
	private HorizontalPanel content;
	private AbsolutePanel contentG;
	private AbsolutePanel contentD;
	private AbsolutePanel header;
	private AbsolutePanel footer;
	private Label titre;
	
	private Label choixImage;
	private ListBox listChoixImage;
	private SimplePanel imageTrollModif;
	private Label insertionImage;
	private ImgFileUpload parcourir;
	
	private HorizontalPanel hNom, hRace, hCarac, hAttaque, hDegat, hEsquive;
	private HorizontalPanel hRegen, hPV, hComp, hComp1, hComp2, hNbPointsRestantsCarac, hNbPointsRestantsComp;
	private HorizontalPanel creation;
	
	private Label nom, race, carac, attaque, degat, esquive;
	private Label regen, pv, comp, comp1, comp2, nbPointsRestantsCarac, nbPointsRestantsComp;
	private Label messageErreur;
	
	private ArrayList<ImgResultSerialized> resultImage;
	private String lesRaces[];
	private Image imageVue;
	
	private TextBox txtNom;
	private ListBox listRace;
	private TextBox txtAttaque, txtDegat, txtEsquive, txtRegen;
	private TextBox txtPV, txtComp1, txtComp2, txtNbPointsRestantsCarac, txtNbPointsRestantsComp;
	
	private Button caracPlus, attaquePlus, degatPlus;
	private Button esquivePlus, regenPlus, PVPlus, comp1Plus, comp2Plus;
	private Button caracMoins, attaqueMoins, degatMoins;
	private Button esquiveMoins, regenMoins, PVMoins, comp1Moins, comp2Moins;
	
	private int intNbPointsCaracTotal, intNbPointsCompTotal;
	
	private UnTroll trollAModifier;
	private ArrayList<TrollResultSerialized> resultDonne;
	
	public CreatModifTroll(ArrayList<ImgResultSerialized> resultImageDonne, ArrayList<TrollResultSerialized> resultDonnes) {
		
		this.resultDonne=resultDonnes;
		
		page = new VerticalPanel();
		page.setStyleName("page");
		
		header = new AbsolutePanel();
		header.setStyleName("header");
		page.add(header);
		
		titre = new Label("Création de TROLL");
		titre.setStyleName("titre");
		header.add(titre);
		
		creer = new Button("Créer");
		creer.addClickHandler(this);
		creer.setStyleName("boutonSubmit");
		
		retour = new Button("Retour");
		retour.addClickHandler(this);
		retour.setStyleName("boutonSubmit");
		
		content = new HorizontalPanel();
		content.setStyleName("pageCreation");
		content.setSpacing(50);
		contentG = new AbsolutePanel();
		contentG.setStyleName("contentG");
		contentD = new AbsolutePanel();
		contentD.setStyleName("contentD");
		
		choixImage = new Label("Choix d'une image de Troll");
		choixImage.setStyleName("choixImageAjoutModifTroll");
		
		listChoixImage = new ListBox();
		listChoixImage.addChangeHandler(this);
		this.resultImage = new ArrayList<ImgResultSerialized>();
		
		//On ajoute les images
		for(int i=0;i<resultImageDonne.size();i++)
		{
			if(resultImageDonne.get(i).getUrl().endsWith("jpg") || resultImageDonne.get(i).getUrl().endsWith("png")|| resultImageDonne.get(i).getUrl().endsWith("gif"))
			{
				listChoixImage.addItem(resultImageDonne.get(i).getUrl());
				this.resultImage.add(resultImageDonne.get(i));
			}
		}
				
		listChoixImage.setStyleName("listChoixImage");
		
		imageTrollModif = new SimplePanel();
		imageVue =  new Image("image/"+resultImage.get(listChoixImage.getSelectedIndex()).getUrl());
		imageVue.setStyleName("imageTrollModif");
		

		
		imageTrollModif.add(imageVue);
		imageTrollModif.setStyleName("imageTrollModif");
		
		insertionImage = new Label("Insertion d'une nouvelle image de Troll");
		insertionImage.setStyleName("insertionImage");
		
		parcourir = new ImgFileUpload();
		parcourir.setStyleName("btnParcourir");
		
		contentG.add(choixImage);
		contentG.add(listChoixImage);
		contentG.add(imageTrollModif);
		contentG.add(insertionImage);
		contentG.add(parcourir);
		

		hNom = new HorizontalPanel();
		hNom.setStyleName("panHorizonCaracAjoutModifTroll");
		hRace = new HorizontalPanel();
		hRace.setStyleName("panHorizonCaracAjoutModifTroll");
		hCarac = new HorizontalPanel();
		hCarac.setStyleName("panHorizonCaracAjoutModifTrollGlobal");
		hAttaque = new HorizontalPanel();
		hAttaque.setStyleName("panHorizonCaracAjoutModifTroll");
		hDegat = new HorizontalPanel();
		hDegat.setStyleName("panHorizonCaracAjoutModifTroll");
		hEsquive = new HorizontalPanel();
		hEsquive.setStyleName("panHorizonCaracAjoutModifTroll");
		hRegen = new HorizontalPanel();
		hRegen.setStyleName("panHorizonCaracAjoutModifTroll");
		hPV = new HorizontalPanel();
		hPV.setStyleName("panHorizonCaracAjoutModifTroll");
		hComp = new HorizontalPanel();
		hComp.setStyleName("panHorizonCaracAjoutModifTrollGlobal");
		hComp1 = new HorizontalPanel();
		hComp1.setStyleName("panHorizonCaracAjoutModifTroll");
		hComp2 = new HorizontalPanel();
		hComp2.setStyleName("panHorizonCaracAjoutModifTroll");
		hNbPointsRestantsCarac = new HorizontalPanel();
		hNbPointsRestantsCarac.setStyleName("panHorizonCaracAjoutModifTroll");
		hNbPointsRestantsComp = new HorizontalPanel();
		hNbPointsRestantsComp.setStyleName("panHorizonCaracAjoutModifTroll");
		
		creation=new HorizontalPanel();
		creation.setStyleName("contentDD");
		
		nom = new Label("Nom");
		nom.setStyleName("labelCaracAjoutModif");
		race = new Label("Race");
		race.setStyleName("labelCaracAjoutModif");
		carac = new Label("Caractéristiques");
		carac.setStyleName("labelCaracAjoutModifGlobal");
		attaque = new Label("Attaque");
		attaque.setStyleName("labelCaracAjoutModif");
		degat = new Label("Dégâts");
		degat.setStyleName("labelCaracAjoutModif");
		esquive = new Label("Esquive");
		esquive.setStyleName("labelCaracAjoutModif");
		regen = new Label("Régénération");
		regen.setStyleName("labelCaracAjoutModif");
		pv = new Label("Point de vie");
		pv.setStyleName("labelCaracAjoutModif");
		comp = new Label("Compétences");
		comp.setStyleName("labelCaracAjoutModifGlobal");
		comp1 = new Label("Compétence 1");
		comp1.setStyleName("labelCaracAjoutModif");
		comp2 = new Label("Compétence 2");
		comp2.setStyleName("labelCaracAjoutModif");
		nbPointsRestantsCarac = new Label("Nombres de points restants");
		nbPointsRestantsCarac.setStyleName("labelCaracAjoutModif");
		nbPointsRestantsComp = new Label("Nombres de points restants");
		nbPointsRestantsComp.setStyleName("labelCaracAjoutModif");
		
		messageErreur = new Label("");
		messageErreur.setVisible(false);
		messageErreur.setStyleName("messageErreur");
		
		txtNom = new TextBox();
		txtNom.setStyleName("textBoxCaracAjoutModifTroll");
		
		lesRaces = Race.getRaces();
		
		listRace = new ListBox();
		listRace.addChangeHandler(this);
		
		//On ajoute les races
		for(int i=0;i<lesRaces.length;i++)
		{
			listRace.addItem(lesRaces[i]);
		}
		Race raceDebut = new Race(lesRaces[this.listRace.getSelectedIndex()]);
		//Rajouter le fonctionnement de l'ajout des compétences spécifiques
		Competence tabComp[] = raceDebut.getCompetence();
		comp1.setText(tabComp[0].getNom());
		comp2.setText(tabComp[1].getNom());
		
		listRace.setStyleName("textBoxCaracAjoutModifTroll");
		txtAttaque = new TextBox();
		txtAttaque.setStyleName("textBoxCaracAjoutModifTroll");
		txtAttaque.setText("0");
		txtAttaque.setReadOnly(true);
		txtDegat = new TextBox();
		txtDegat.setStyleName("textBoxCaracAjoutModifTroll");
		txtDegat.setText("0");
		txtDegat.setReadOnly(true);
		txtEsquive = new TextBox();
		txtEsquive.setStyleName("textBoxCaracAjoutModifTroll");
		txtEsquive.setText("0");
		txtEsquive.setReadOnly(true);
		txtRegen = new TextBox();
		txtRegen.setStyleName("textBoxCaracAjoutModifTroll");
		txtRegen.setText("0");
		txtRegen.setReadOnly(true);
		txtPV = new TextBox();
		txtPV.setStyleName("textBoxCaracAjoutModifTroll");
		txtPV.setText("0");
		txtPV.setReadOnly(true);
		txtComp1 = new TextBox();
		txtComp1.setStyleName("textBoxCaracAjoutModifTroll");
		txtComp1.setText("0");
		txtComp1.setReadOnly(true);
		txtComp2 = new TextBox();
		txtComp2.setStyleName("textBoxCaracAjoutModifTroll");
		txtComp2.setText("0");
		txtComp2.setReadOnly(true);
		txtNbPointsRestantsCarac = new TextBox();
		txtNbPointsRestantsCarac.setStyleName("textBoxCaracAjoutModifTroll");
		txtNbPointsRestantsComp = new TextBox();
		txtNbPointsRestantsComp.setStyleName("textBoxCaracAjoutModifTroll");
		
		//on initialise le nombre de points restants
		intNbPointsCaracTotal=50;
		intNbPointsCompTotal=20;
		txtNbPointsRestantsCarac.setText(""+intNbPointsCaracTotal);
		txtNbPointsRestantsCarac.setReadOnly(true);
		txtNbPointsRestantsComp.setText(""+intNbPointsCompTotal);
		txtNbPointsRestantsComp.setReadOnly(true);
		
		/* Initialisation des boutont */
		caracPlus = new Button("+");
		caracPlus.setStyleName("btnAjoutSoustrait");
		caracPlus.addClickHandler(this);
		attaquePlus = new Button("+");
		attaquePlus.setStyleName("btnAjoutSoustrait");
		attaquePlus.addClickHandler(this);
		degatPlus = new Button("+");
		degatPlus.setStyleName("btnAjoutSoustrait");
		degatPlus.addClickHandler(this);
		esquivePlus = new Button("+");
		esquivePlus.setStyleName("btnAjoutSoustrait");
		esquivePlus.addClickHandler(this);
		regenPlus = new Button("+");
		regenPlus.setStyleName("btnAjoutSoustrait");
		regenPlus.addClickHandler(this);
		PVPlus = new Button("+");
		PVPlus.setStyleName("btnAjoutSoustrait");
		PVPlus.addClickHandler(this);
		comp1Plus = new Button("+");
		comp1Plus.setStyleName("btnAjoutSoustrait");
		comp1Plus.addClickHandler(this);
		comp2Plus = new Button("+");
		comp2Plus.setStyleName("btnAjoutSoustrait");
		comp2Plus.addClickHandler(this);
		caracMoins = new Button("-");
		caracMoins.setStyleName("btnAjoutSoustrait");
		caracMoins.addClickHandler(this);
		attaqueMoins = new Button("-");
		attaqueMoins.setStyleName("btnAjoutSoustrait");
		attaqueMoins.addClickHandler(this);
		degatMoins = new Button("-");
		degatMoins.setStyleName("btnAjoutSoustrait");
		degatMoins.addClickHandler(this);
		esquiveMoins = new Button("-");
		esquiveMoins.setStyleName("btnAjoutSoustrait");
		esquiveMoins.addClickHandler(this);
		regenMoins = new Button("-");
		regenMoins.setStyleName("btnAjoutSoustrait");
		regenMoins.addClickHandler(this);
		PVMoins = new Button("-");
		PVMoins.setStyleName("btnAjoutSoustrait");
		PVMoins.addClickHandler(this);
		comp1Moins = new Button("-");
		comp1Moins.setStyleName("btnAjoutSoustrait");
		comp1Moins.addClickHandler(this);
		comp2Moins = new Button("-");
		comp2Moins.setStyleName("btnAjoutSoustrait");
		comp2Moins.addClickHandler(this);
		//On disable les boutons
		attaqueMoins.setEnabled(false);
		degatMoins.setEnabled(false);
		esquiveMoins.setEnabled(false);
		regenMoins.setEnabled(false);
		PVMoins.setEnabled(false);
		comp1Moins.setEnabled(false);
		comp2Moins.setEnabled(false);
		
		/* Initialisation des horizontale panel */
		hNom.add(nom);
		hNom.add(txtNom);
		hRace.add(race);
		hRace.add(listRace);
		hCarac.add(carac);
		hAttaque.add(attaque);
		hAttaque.add(txtAttaque);
		hAttaque.add(attaquePlus);
		hAttaque.add(attaqueMoins);
		hDegat.add(degat);
		hDegat.add(txtDegat);
		hDegat.add(degatPlus);
		hDegat.add(degatMoins);
		hEsquive.add(esquive);
		hEsquive.add(txtEsquive);
		hEsquive.add(esquivePlus);
		hEsquive.add(esquiveMoins);
		hRegen.add(regen);
		hRegen.add(txtRegen);
		hRegen.add(regenPlus);
		hRegen.add(regenMoins);
		hPV.add(pv);
		hPV.add(txtPV);
		hPV.add(PVPlus);
		hPV.add(PVMoins);
		hComp.add(comp);
		hComp1.add(comp1);
		hComp1.add(txtComp1);
		hComp1.add(comp1Plus);
		hComp1.add(comp1Moins);
		hComp2.add(comp2);
		hComp2.add(txtComp2);
		hComp2.add(comp2Plus);
		hComp2.add(comp2Moins);
		hNbPointsRestantsCarac.add(nbPointsRestantsCarac);
		hNbPointsRestantsCarac.add(txtNbPointsRestantsCarac);
		hNbPointsRestantsComp.add(nbPointsRestantsComp);
		hNbPointsRestantsComp.add(txtNbPointsRestantsComp);
		
		/* On insère les horizontales panels dans le panel centrale de droite */
		contentD.add(hNom);
		contentD.add(hRace);
		contentD.add(hCarac);
		contentD.add(hNbPointsRestantsCarac);
		contentD.add(hAttaque);
		contentD.add(hDegat);
		contentD.add(hEsquive);
		contentD.add(hRegen);
		contentD.add(hPV);
		contentD.add(hComp);
		contentD.add(hNbPointsRestantsComp);
		contentD.add(hComp1);
		contentD.add(hComp2);
		
		
		creation.add(creer);
		creation.add(retour);
		creation.add(messageErreur);
		
		content.add(contentG);
		content.add(contentD);
		
		page.add(content);		
		page.add(creation);
		
		//footer
		footer = new AbsolutePanel();
		footer.setStyleName("footer");
		page.add(footer);
		
		initWidget(page);
	}
	
	public CreatModifTroll(ArrayList<ImgResultSerialized> resultImageDonne, ArrayList<TrollResultSerialized> resultDonnes,boolean b) {
		
		this.resultDonne=resultDonnes;
		
		page = new VerticalPanel();
		page.setStyleName("page");
		
		header = new AbsolutePanel();
		header.setStyleName("header");
		page.add(header);
		
		titre = new Label("Modification de TROLL");
		titre.setStyleName("titre");
		header.add(titre);
		
		creer = new Button("Modifier");
		creer.addClickHandler(this);
		creer.setStyleName("btn");
		
		retour = new Button("Retour");
		retour.addClickHandler(this);
		retour.setStyleName("btn");
		
		content = new HorizontalPanel();
		content.setStyleName("pageCreation");
		content.setSpacing(50);
		contentG = new AbsolutePanel();
		contentG.setStyleName("contentG");
		contentD = new AbsolutePanel();
		contentD.setStyleName("contentD");
		
		choixImage = new Label("Choix d'une image de Troll");
		choixImage.setStyleName("choixImageAjoutModifTroll");
		
		listChoixImage = new ListBox();
		listChoixImage.addChangeHandler(this);
		this.resultImage = new ArrayList<ImgResultSerialized>();
		
		//On ajoute les images
		for(int i=0;i<resultImageDonne.size();i++)
		{
			if(resultImageDonne.get(i).getUrl().endsWith("jpg") || resultImageDonne.get(i).getUrl().endsWith("png")|| resultImageDonne.get(i).getUrl().endsWith("gif"))
			{
				listChoixImage.addItem(resultImageDonne.get(i).getUrl());
				this.resultImage.add(resultImageDonne.get(i));
			}
		}
				
		listChoixImage.setStyleName("listChoixImage");
		
		imageTrollModif = new SimplePanel();
		imageVue =  new Image("image/"+resultImage.get(listChoixImage.getSelectedIndex()).getUrl());
		imageVue.setStyleName("imageTrollModif");

		
		imageTrollModif.add(imageVue);
		imageTrollModif.setStyleName("imageTrollModif");
		
		insertionImage = new Label("Insertion d'une nouvelle image de Troll");
		insertionImage.setStyleName("insertionImage");
		
		parcourir = new ImgFileUpload();
		parcourir.setStyleName("btnParcourir");
		
		contentG.add(choixImage);
		contentG.add(listChoixImage);
		contentG.add(imageTrollModif);
		contentG.add(insertionImage);
		contentG.add(parcourir);
		

		hNom = new HorizontalPanel();
		hNom.setStyleName("panHorizonCaracAjoutModifTroll");
		hRace = new HorizontalPanel();
		hRace.setStyleName("panHorizonCaracAjoutModifTroll");
		hCarac = new HorizontalPanel();
		hCarac.setStyleName("panHorizonCaracAjoutModifTrollGlobal");
		hAttaque = new HorizontalPanel();
		hAttaque.setStyleName("panHorizonCaracAjoutModifTroll");
		hDegat = new HorizontalPanel();
		hDegat.setStyleName("panHorizonCaracAjoutModifTroll");
		hEsquive = new HorizontalPanel();
		hEsquive.setStyleName("panHorizonCaracAjoutModifTroll");
		hRegen = new HorizontalPanel();
		hRegen.setStyleName("panHorizonCaracAjoutModifTroll");
		hPV = new HorizontalPanel();
		hPV.setStyleName("panHorizonCaracAjoutModifTroll");
		hComp = new HorizontalPanel();
		hComp.setStyleName("panHorizonCaracAjoutModifTrollGlobal");
		hComp1 = new HorizontalPanel();
		hComp1.setStyleName("panHorizonCaracAjoutModifTroll");
		hComp2 = new HorizontalPanel();
		hComp2.setStyleName("panHorizonCaracAjoutModifTroll");
		hNbPointsRestantsCarac = new HorizontalPanel();
		hNbPointsRestantsCarac.setStyleName("panHorizonCaracAjoutModifTroll");
		hNbPointsRestantsComp = new HorizontalPanel();
		hNbPointsRestantsComp.setStyleName("panHorizonCaracAjoutModifTroll");
		
		creation=new HorizontalPanel();
		creation.setStyleName("contentDD");
		
		nom = new Label("Nom");
		nom.setStyleName("labelCaracAjoutModif");
		race = new Label("Race");
		race.setStyleName("labelCaracAjoutModif");
		carac = new Label("Caractéristiques");
		carac.setStyleName("labelCaracAjoutModifGlobal");
		attaque = new Label("Attaque");
		attaque.setStyleName("labelCaracAjoutModif");
		degat = new Label("Dégâts");
		degat.setStyleName("labelCaracAjoutModif");
		esquive = new Label("Esquive");
		esquive.setStyleName("labelCaracAjoutModif");
		regen = new Label("Régénération");
		regen.setStyleName("labelCaracAjoutModif");
		pv = new Label("Point de vie");
		pv.setStyleName("labelCaracAjoutModif");
		comp = new Label("Compétences");
		comp.setStyleName("labelCaracAjoutModifGlobal");
		comp1 = new Label("Compétence 1");
		comp1.setStyleName("labelCaracAjoutModif");
		comp2 = new Label("Compétence 2");
		comp2.setStyleName("labelCaracAjoutModif");
		nbPointsRestantsCarac = new Label("Nombres de points restants");
		nbPointsRestantsCarac.setStyleName("labelCaracAjoutModif");
		nbPointsRestantsComp = new Label("Nombres de points restants");
		nbPointsRestantsComp.setStyleName("labelCaracAjoutModif");
		
		messageErreur = new Label("");
		messageErreur.setVisible(false);
		messageErreur.setStyleName("messageErreur");
		
		txtNom = new TextBox();
		txtNom.setStyleName("textBoxCaracAjoutModifTroll");
		
		lesRaces = Race.getRaces();
		
		listRace = new ListBox();
		listRace.addChangeHandler(this);
		
		//On ajoute les races
		for(int i=0;i<lesRaces.length;i++)
		{
			listRace.addItem(lesRaces[i]);
		}
		Race raceDebut = new Race(lesRaces[this.listRace.getSelectedIndex()]);
		//Rajouter le fonctionnement de l'ajout des compétences spécifiques
		Competence tabComp[] = raceDebut.getCompetence();
		comp1.setText(tabComp[0].getNom());
		comp2.setText(tabComp[1].getNom());
		
		listRace.setStyleName("textBoxCaracAjoutModifTroll");
		txtAttaque = new TextBox();
		txtAttaque.setStyleName("textBoxCaracAjoutModifTroll");
		txtAttaque.setText("0");
		txtAttaque.setReadOnly(true);
		txtDegat = new TextBox();
		txtDegat.setStyleName("textBoxCaracAjoutModifTroll");
		txtDegat.setText("0");
		txtDegat.setReadOnly(true);
		txtEsquive = new TextBox();
		txtEsquive.setStyleName("textBoxCaracAjoutModifTroll");
		txtEsquive.setText("0");
		txtEsquive.setReadOnly(true);
		txtRegen = new TextBox();
		txtRegen.setStyleName("textBoxCaracAjoutModifTroll");
		txtRegen.setText("0");
		txtRegen.setReadOnly(true);
		txtPV = new TextBox();
		txtPV.setStyleName("textBoxCaracAjoutModifTroll");
		txtPV.setText("0");
		txtPV.setReadOnly(true);
		txtComp1 = new TextBox();
		txtComp1.setStyleName("textBoxCaracAjoutModifTroll");
		txtComp1.setText("0");
		txtComp1.setReadOnly(true);
		txtComp2 = new TextBox();
		txtComp2.setStyleName("textBoxCaracAjoutModifTroll");
		txtComp2.setText("0");
		txtComp2.setReadOnly(true);
		txtNbPointsRestantsCarac = new TextBox();
		txtNbPointsRestantsCarac.setStyleName("textBoxCaracAjoutModifTroll");
		txtNbPointsRestantsComp = new TextBox();
		txtNbPointsRestantsComp.setStyleName("textBoxCaracAjoutModifTroll");
		
		//on initialise le nombre de points restants
		intNbPointsCaracTotal=50;
		intNbPointsCompTotal=20;
		txtNbPointsRestantsCarac.setText(""+intNbPointsCaracTotal);
		txtNbPointsRestantsCarac.setReadOnly(true);
		txtNbPointsRestantsComp.setText(""+intNbPointsCompTotal);
		txtNbPointsRestantsComp.setReadOnly(true);
		
		/* Initialisation des boutont */
		caracPlus = new Button("+");
		caracPlus.setStyleName("btnAjoutSoustrait");
		caracPlus.addClickHandler(this);
		attaquePlus = new Button("+");
		attaquePlus.setStyleName("btnAjoutSoustrait");
		attaquePlus.addClickHandler(this);
		degatPlus = new Button("+");
		degatPlus.setStyleName("btnAjoutSoustrait");
		degatPlus.addClickHandler(this);
		esquivePlus = new Button("+");
		esquivePlus.setStyleName("btnAjoutSoustrait");
		esquivePlus.addClickHandler(this);
		regenPlus = new Button("+");
		regenPlus.setStyleName("btnAjoutSoustrait");
		regenPlus.addClickHandler(this);
		PVPlus = new Button("+");
		PVPlus.setStyleName("btnAjoutSoustrait");
		PVPlus.addClickHandler(this);
		comp1Plus = new Button("+");
		comp1Plus.setStyleName("btnAjoutSoustrait");
		comp1Plus.addClickHandler(this);
		comp2Plus = new Button("+");
		comp2Plus.setStyleName("btnAjoutSoustrait");
		comp2Plus.addClickHandler(this);
		caracMoins = new Button("-");
		caracMoins.setStyleName("btnAjoutSoustrait");
		caracMoins.addClickHandler(this);
		attaqueMoins = new Button("-");
		attaqueMoins.setStyleName("btnAjoutSoustrait");
		attaqueMoins.addClickHandler(this);
		degatMoins = new Button("-");
		degatMoins.setStyleName("btnAjoutSoustrait");
		degatMoins.addClickHandler(this);
		esquiveMoins = new Button("-");
		esquiveMoins.setStyleName("btnAjoutSoustrait");
		esquiveMoins.addClickHandler(this);
		regenMoins = new Button("-");
		regenMoins.setStyleName("btnAjoutSoustrait");
		regenMoins.addClickHandler(this);
		PVMoins = new Button("-");
		PVMoins.setStyleName("btnAjoutSoustrait");
		PVMoins.addClickHandler(this);
		comp1Moins = new Button("-");
		comp1Moins.setStyleName("btnAjoutSoustrait");
		comp1Moins.addClickHandler(this);
		comp2Moins = new Button("-");
		comp2Moins.setStyleName("btnAjoutSoustrait");
		comp2Moins.addClickHandler(this);
		//On disable les boutons
		attaqueMoins.setEnabled(false);
		degatMoins.setEnabled(false);
		esquiveMoins.setEnabled(false);
		regenMoins.setEnabled(false);
		PVMoins.setEnabled(false);
		comp1Moins.setEnabled(false);
		comp2Moins.setEnabled(false);
		
		/* Initialisation des horizontale panel */
		hNom.add(nom);
		hNom.add(txtNom);
		hRace.add(race);
		hRace.add(listRace);
		hCarac.add(carac);
		hAttaque.add(attaque);
		hAttaque.add(txtAttaque);
		hAttaque.add(attaquePlus);
		hAttaque.add(attaqueMoins);
		hDegat.add(degat);
		hDegat.add(txtDegat);
		hDegat.add(degatPlus);
		hDegat.add(degatMoins);
		hEsquive.add(esquive);
		hEsquive.add(txtEsquive);
		hEsquive.add(esquivePlus);
		hEsquive.add(esquiveMoins);
		hRegen.add(regen);
		hRegen.add(txtRegen);
		hRegen.add(regenPlus);
		hRegen.add(regenMoins);
		hPV.add(pv);
		hPV.add(txtPV);
		hPV.add(PVPlus);
		hPV.add(PVMoins);
		hComp.add(comp);
		hComp1.add(comp1);
		hComp1.add(txtComp1);
		hComp1.add(comp1Plus);
		hComp1.add(comp1Moins);
		hComp2.add(comp2);
		hComp2.add(txtComp2);
		hComp2.add(comp2Plus);
		hComp2.add(comp2Moins);
		hNbPointsRestantsCarac.add(nbPointsRestantsCarac);
		hNbPointsRestantsCarac.add(txtNbPointsRestantsCarac);
		hNbPointsRestantsComp.add(nbPointsRestantsComp);
		hNbPointsRestantsComp.add(txtNbPointsRestantsComp);
		
		/* On insère les horizontales panels dans le panel centrale de droite */
		contentD.add(hNom);
		contentD.add(hRace);
		contentD.add(hCarac);
		contentD.add(hNbPointsRestantsCarac);
		contentD.add(hAttaque);
		contentD.add(hDegat);
		contentD.add(hEsquive);
		contentD.add(hRegen);
		contentD.add(hPV);
		contentD.add(hComp);
		contentD.add(hNbPointsRestantsComp);
		contentD.add(hComp1);
		contentD.add(hComp2);
		
		
		creation.add(creer);
		creation.add(retour);
		creation.add(messageErreur);
		
		content.add(contentG);
		content.add(contentD);
		
		page.add(creation);
		page.add(content);
		
		//footer
		footer = new AbsolutePanel();
		footer.setStyleName("footer");
		page.add(footer);
		
		initWidget(page);
	}
	
	/**
	 * On envoie le troll à modifier
	 * Modification des champs pour faires apparaître les caractéristiques du troll envoyé
	 * @param trollToModif
	 */
	public void setTroll(UnTroll trollToModif) 
	{
		trollAModifier=trollToModif;
		
		int res =0;
		//On ajoute les images
		for(int i=0;i<resultImage.size();i++)
		{
			if(this.trollAModifier.getNomImage().equals(resultImage.get(i).getUrl()))
			{
				res=i;
			}
		}
		listChoixImage.setSelectedIndex(res);
		listChoixImage.setStyleName("listChoixImage");
		
		
		for(int i=0;i<this.lesRaces.length;i++)
		{
			if(this.lesRaces[i].equals(trollToModif.getRace()))
			{
				res=i;
			}
		}
		listRace.setSelectedIndex(res);
		
		imageTrollModif.remove(imageVue);
		imageVue =  new Image("image/"+resultImage.get(res).getUrl());
		imageVue.setStyleName("imageTrollModif");
		imageTrollModif.add(imageVue);
		
		this.txtNom.setText(trollToModif.getNom().split(".txt")[0]);
		this.txtAttaque.setText(""+trollToModif.getPointCaracteristique()[0]);
		this.txtDegat.setText(""+trollToModif.getPointCaracteristique()[1]);
		this.txtEsquive.setText(""+trollToModif.getPointCaracteristique()[2]);
		this.txtRegen.setText(""+trollToModif.getPointCaracteristique()[3]);
		this.txtPV.setText(""+trollToModif.getPointCaracteristique()[4]);
		this.txtComp1.setText(""+trollToModif.getPointCompetence()[0]);
		this.txtComp2.setText(""+trollToModif.getPointCompetence()[1]);
		
		this.txtNbPointsRestantsCarac.setText(""+(50-trollToModif.getPointCaracteristique()[0]-trollToModif.getPointCaracteristique()[1]-trollToModif.getPointCaracteristique()[2]-trollToModif.getPointCaracteristique()[3]-trollToModif.getPointCaracteristique()[4]));
		this.txtNbPointsRestantsComp.setText(""+(20-trollToModif.getPointCompetence()[0]-trollToModif.getPointCompetence()[1]));
		
		this.activationBouton(false);
		this.activationBouton(true);
				
	}
	
	public void activationBouton(boolean competence){
		if(!competence){
			int nbPointsCarac = Integer.parseInt(this.txtNbPointsRestantsCarac.getText());
			int attaque = Integer.parseInt(this.txtAttaque.getText());
			int degat = Integer.parseInt(this.txtDegat.getText());
			int esquive = Integer.parseInt(this.txtEsquive.getText());
			int regen = Integer.parseInt(this.txtRegen.getText());
			int pv = Integer.parseInt(this.txtPV.getText());
			
			/* test boutons attaque */
			if(attaque <= 0){
				this.attaqueMoins.setEnabled(false);
			}else{
				this.attaqueMoins.setEnabled(true);
			}
			if(nbPointsCarac <= 0){
				this.attaquePlus.setEnabled(false);
			}else{
				this.attaquePlus.setEnabled(true);				
			}
			/* test bouton degat */
			if(degat <= 0){
				this.degatMoins.setEnabled(false);
			}else{
				this.degatMoins.setEnabled(true);
			}
			if(nbPointsCarac <= 0){
				this.degatPlus.setEnabled(false);
			}else{
				this.degatPlus.setEnabled(true);				
			}
			/* test bouton esquive */
			if(esquive <= 0){
				this.esquiveMoins.setEnabled(false);
			}else{
				this.esquiveMoins.setEnabled(true);
			}
			if(nbPointsCarac <= 0){
				this.esquivePlus.setEnabled(false);
			}else{
				this.esquivePlus.setEnabled(true);				
			}
			/* test bouton regen */
			if(regen <= 0){
				this.regenMoins.setEnabled(false);
			}else{
				this.regenMoins.setEnabled(true);
			}
			if(nbPointsCarac <= 0){
				this.regenPlus.setEnabled(false);
			}else{
				this.regenPlus.setEnabled(true);				
			}
			/* test bouton pv */
			if(pv <= 0){
				this.PVMoins.setEnabled(false);
			}else{
				this.PVMoins.setEnabled(true);
			}
			if(nbPointsCarac <= 0){
				this.PVPlus.setEnabled(false);
			}else{
				this.PVPlus.setEnabled(true);				
			}
			
				
		}else{
			int nbPointsComp = Integer.parseInt(this.txtNbPointsRestantsComp.getText());
			int comp1 = Integer.parseInt(this.txtComp1.getText());
			int comp2 = Integer.parseInt(this.txtComp2.getText());
			
			/* test des boutons comp1 */
			if(comp1 <= 0){
				this.comp1Moins.setEnabled(false);
			}else{
				this.comp1Moins.setEnabled(true);
			}
			if(nbPointsComp <= 0){
				this.comp1Plus.setEnabled(false);
			}else{
				this.comp1Plus.setEnabled(true);				
			}
			/* test des boutons de comp2 */
			if(comp2 <= 0){
				this.comp2Moins.setEnabled(false);
			}else{
				this.comp2Moins.setEnabled(true);
			}
			if(nbPointsComp <= 0){
				this.comp2Plus.setEnabled(false);
			}else{
				this.comp2Plus.setEnabled(true);				
			}
		}
	}
	
	public void decrementerNbPointCarac(int nbPoint){
		int nbPointCarac = Integer.parseInt(this.txtNbPointsRestantsCarac.getText());
		if(nbPointCarac < intNbPointsCaracTotal){
			nbPointCarac = nbPointCarac - nbPoint;
		}
		this.txtNbPointsRestantsCarac.setText(""+nbPointCarac);
	}
	
	public void incrementerNbPointCarac(int nbPoint){
		int nbPointCarac = Integer.parseInt(this.txtNbPointsRestantsCarac.getText());
		if(nbPointCarac > 0){
			nbPointCarac = nbPointCarac - nbPoint;
		}
		if(nbPointCarac == 0){
			this.attaquePlus.setEnabled(false);
			this.degatPlus.setEnabled(false);
			this.esquivePlus.setEnabled(false);
			this.regenPlus.setEnabled(false);
			this.PVPlus.setEnabled(false);
		}
		this.txtNbPointsRestantsCarac.setText(""+nbPointCarac);
		
	}
	
	public void decrementerNbPointComp(int nbPoint){
		int nbPointComp = Integer.parseInt(this.txtNbPointsRestantsComp.getText());
		if(nbPointComp < intNbPointsCompTotal){
			nbPointComp = nbPointComp - nbPoint;
		}
		this.txtNbPointsRestantsComp.setText(""+nbPointComp);
		
	}
	
	public void incrementerNbPointComp(int nbPoint){
		int nbPointComp = Integer.parseInt(this.txtNbPointsRestantsComp.getText());
		if(nbPointComp > 0){
			nbPointComp = nbPointComp - nbPoint;
		}
		if(nbPointComp == 0){
			this.comp1Plus.setEnabled(false);
			this.comp2Plus.setEnabled(false);
		}
		this.txtNbPointsRestantsComp.setText(""+nbPointComp);
		
	}
	
	public void afficherErreur(String erreurSet)
	{
		messageErreur.setVisible(true);
		messageErreur.setText(erreurSet);
	}
	
	public void effacerErreur()
	{
		messageErreur.setVisible(false);
		messageErreur.setText("");
	}
	/**
	 * On récupère les informations entré pour créer le troll
	 */
	public void creerTroll()
	{
		//ON efface les message d'erreurs
		this.effacerErreur();
		String nom =this.txtNom.getText();
		
		//Sécurité
		nom=nom.replaceAll("/", "");
		//nom=nom.replaceAll("\\", "");
		nom=nom.replaceAll("_", "");
		nom=nom.replaceAll("-", "");
		
		
		String race = this.lesRaces[this.listRace.getSelectedIndex()];
		
		//Les info du troll ( ex : Tomawak/5/15/10/20/5/15/0/troll.jpg )
		String info = race+"/"+this.txtComp1.getText()+"/"+this.txtComp2.getText()+"/"+this.txtAttaque.getText()+"/"+this.txtDegat.getText()+"/"+this.txtEsquive.getText()+"/"+this.txtRegen.getText()+"/"+this.txtPV.getText()+"/"+this.resultImage.get(this.listChoixImage.getSelectedIndex()).getUrl();
		
		if(!nom.equals(""))
		{
			if(this.txtNbPointsRestantsCarac.getText().equals("0"))
			{
				if(this.txtNbPointsRestantsComp.getText().equals("0"))
				{
					Troll.get().creerTroll(nom, info);
					Troll.get().changerPage(0);
				}
				else
				{
					this.afficherErreur("Vous n'avez pas utilisez tous vos points de compétences.");
				}
			}
			else
			{
				this.afficherErreur("Vous n'avez pas utilisez tous vos points de caractéristiques.");
			}
		}
		else
		{
			this.afficherErreur("Le champ 'nom' n'est pas complété.");
		}
	}
	
	@Override
	public void onChange(ChangeEvent event) 
	{
		if(event.getSource()==this.listChoixImage)
		{
			this.imageTrollModif.remove(imageVue);
			imageVue =  new Image("image/"+resultImage.get(listChoixImage.getSelectedIndex()).getUrl());
			imageVue.setStyleName("imageTrollModif");
			this.imageTrollModif.add(imageVue);
		}
		else if(event.getSource()==this.listRace)
		{
			Race race = new Race(lesRaces[this.listRace.getSelectedIndex()]);
			//Rajouter le fonctionnement de l'ajout des compétences spécifiques
			Competence tabComp[] = race.getCompetence();
			comp1.setText(tabComp[0].getNom());
			comp2.setText(tabComp[1].getNom());
		}
		
	}

	@Override
	public void onClick(ClickEvent event) 
	{
		if(event.getSource()==this.creer)
		{
			this.creerTroll();
			
			
		}
		else if(event.getSource()==this.retour)
		{
			this.effacerErreur();
			History.back();
		}
		if(event.getSource()==this.attaqueMoins){
			int attaque = Integer.parseInt(this.txtAttaque.getText());
			if(attaque > 0){
				attaque--;
				this.txtAttaque.setText(""+attaque);
				decrementerNbPointCarac(-1);
			}
		}else if(event.getSource()==this.degatMoins){
			int degat = Integer.parseInt(this.txtDegat.getText());
			if(degat > 0){
				degat--;
				this.txtDegat.setText(""+degat);
				decrementerNbPointCarac(-1);
				
			}
		}else if(event.getSource()==this.esquiveMoins){
			int esquive = Integer.parseInt(this.txtEsquive.getText());
			if(esquive > 0){
				esquive--;
				this.txtEsquive.setText(""+esquive);
				decrementerNbPointCarac(-1);
			}
		}else if(event.getSource()==this.regenMoins){
			int regen = Integer.parseInt(this.txtRegen.getText());
			if(regen > 0){
				regen--;
				this.txtRegen.setText(""+regen);
				decrementerNbPointCarac(-1);
			}
		}else if(event.getSource()==this.PVMoins){
			int pv = Integer.parseInt(this.txtPV.getText());
			if(pv > 0){
				pv--;
				this.txtPV.setText(""+pv);
				decrementerNbPointCarac(-1);
			}
		}else if(event.getSource()==this.attaquePlus){
			int attaque = Integer.parseInt(this.txtAttaque.getText());
			int nbPointCarac = Integer.parseInt(this.txtNbPointsRestantsCarac.getText());
			if(nbPointCarac >= 1){
				attaque++;
				this.txtAttaque.setText(""+attaque);
				incrementerNbPointCarac(1);
				
			}
		}else if(event.getSource()==this.degatPlus){
			int degat = Integer.parseInt(this.txtDegat.getText());
			int nbPointCarac = Integer.parseInt(this.txtNbPointsRestantsCarac.getText());
			if(nbPointCarac >= 1){
				degat++;
				this.txtDegat.setText(""+degat);
				incrementerNbPointCarac(1);
				
			}
		}else if(event.getSource()==this.esquivePlus){
			int esquive = Integer.parseInt(this.txtEsquive.getText());
			int nbPointCarac = Integer.parseInt(this.txtNbPointsRestantsCarac.getText());
			if(nbPointCarac >= 1){
				esquive++;
				this.txtEsquive.setText(""+esquive);
				incrementerNbPointCarac(1);
				
			}
		}else if(event.getSource()==this.regenPlus){
			int regen = Integer.parseInt(this.txtRegen.getText());
			int nbPointCarac = Integer.parseInt(this.txtNbPointsRestantsCarac.getText());
			if(nbPointCarac >= 1){
				regen++;
				this.txtRegen.setText(""+regen);
				incrementerNbPointCarac(1);
				
			}
		}else if(event.getSource()==this.PVPlus){
			int pv = Integer.parseInt(this.txtPV.getText());
			int nbPointCarac = Integer.parseInt(this.txtNbPointsRestantsCarac.getText());
			if(nbPointCarac >= 1){
				pv++;
				this.txtPV.setText(""+pv);
				incrementerNbPointCarac(1);
				
			}
		}
		/* On test l'activation des boutons */
		activationBouton(false);
		
		if(event.getSource()==this.comp1Moins){
			int comp1 = Integer.parseInt(this.txtComp1.getText());
			if(comp1 > 0){
				comp1--;
				this.txtComp1.setText(""+comp1);
				decrementerNbPointComp(-1);
			}
		}else if(event.getSource()==this.comp1Plus){
			int comp1 = Integer.parseInt(this.txtComp1.getText());
			int nbPointComp = Integer.parseInt(this.txtNbPointsRestantsComp.getText());
			if(nbPointComp >= 1){
				comp1++;
				this.txtComp1.setText(""+comp1);
				incrementerNbPointComp(1);
				
			}
		}else if(event.getSource()==this.comp2Moins){
			int comp2 = Integer.parseInt(this.txtComp2.getText());
			if(comp2 > 0){
				comp2--;
				this.txtComp2.setText(""+comp2);
				decrementerNbPointComp(-1);
			}
		}else if(event.getSource()==this.comp2Plus){
			int comp2 = Integer.parseInt(this.txtComp2.getText());
			int nbPointComp = Integer.parseInt(this.txtNbPointsRestantsComp.getText());
			if(nbPointComp >= 1){
				comp2++;
				this.txtComp2.setText(""+comp2);
				incrementerNbPointComp(1);
				
			}
		}
		/* On test l'activation des boutons */
		activationBouton(true);
	}


	
	
}
